Left Termination of the query pattern rev_in_2(g, a) w.r.t. the given Prolog program could successfully be proven:



Prolog
  ↳ PrologToPiTRSProof

Clauses:

rev([], []).
rev(.(X, XS), .(Y, YS)) :- ','(rev1(X, XS, Y), rev2(X, XS, YS)).
rev1(X, [], X).
rev1(X, .(Y, YS), Z) :- rev1(Y, YS, Z).
rev2(X, [], []).
rev2(X, .(Y, YS), ZS) :- ','(rev2(Y, YS, US), ','(rev(US, VS), rev(.(X, VS), ZS))).

Queries:

rev(g,a).

We use the technique of [30].Transforming Prolog into the following Term Rewriting System:
Pi-finite rewrite system:
The TRS R consists of the following rules:

rev_in(.(X, XS), .(Y, YS)) → U1(X, XS, Y, YS, rev1_in(X, XS, Y))
rev1_in(X, .(Y, YS), Z) → U3(X, Y, YS, Z, rev1_in(Y, YS, Z))
rev1_in(X, [], X) → rev1_out(X, [], X)
U3(X, Y, YS, Z, rev1_out(Y, YS, Z)) → rev1_out(X, .(Y, YS), Z)
U1(X, XS, Y, YS, rev1_out(X, XS, Y)) → U2(X, XS, Y, YS, rev2_in(X, XS, YS))
rev2_in(X, .(Y, YS), ZS) → U4(X, Y, YS, ZS, rev2_in(Y, YS, US))
rev2_in(X, [], []) → rev2_out(X, [], [])
U4(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U5(X, Y, YS, ZS, rev_in(US, VS))
rev_in([], []) → rev_out([], [])
U5(X, Y, YS, ZS, rev_out(US, VS)) → U6(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U6(X, Y, YS, ZS, rev_out(.(X, VS), ZS)) → rev2_out(X, .(Y, YS), ZS)
U2(X, XS, Y, YS, rev2_out(X, XS, YS)) → rev_out(.(X, XS), .(Y, YS))

The argument filtering Pi contains the following mapping:
rev_in(x1, x2)  =  rev_in(x1)
.(x1, x2)  =  .(x1, x2)
U1(x1, x2, x3, x4, x5)  =  U1(x1, x2, x5)
rev1_in(x1, x2, x3)  =  rev1_in(x1, x2)
U3(x1, x2, x3, x4, x5)  =  U3(x5)
[]  =  []
rev1_out(x1, x2, x3)  =  rev1_out(x3)
U2(x1, x2, x3, x4, x5)  =  U2(x3, x5)
rev2_in(x1, x2, x3)  =  rev2_in(x1, x2)
U4(x1, x2, x3, x4, x5)  =  U4(x1, x5)
rev2_out(x1, x2, x3)  =  rev2_out(x3)
U5(x1, x2, x3, x4, x5)  =  U5(x1, x5)
rev_out(x1, x2)  =  rev_out(x2)
U6(x1, x2, x3, x4, x5)  =  U6(x5)

Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog



↳ Prolog
  ↳ PrologToPiTRSProof
PiTRS
      ↳ DependencyPairsProof

Pi-finite rewrite system:
The TRS R consists of the following rules:

rev_in(.(X, XS), .(Y, YS)) → U1(X, XS, Y, YS, rev1_in(X, XS, Y))
rev1_in(X, .(Y, YS), Z) → U3(X, Y, YS, Z, rev1_in(Y, YS, Z))
rev1_in(X, [], X) → rev1_out(X, [], X)
U3(X, Y, YS, Z, rev1_out(Y, YS, Z)) → rev1_out(X, .(Y, YS), Z)
U1(X, XS, Y, YS, rev1_out(X, XS, Y)) → U2(X, XS, Y, YS, rev2_in(X, XS, YS))
rev2_in(X, .(Y, YS), ZS) → U4(X, Y, YS, ZS, rev2_in(Y, YS, US))
rev2_in(X, [], []) → rev2_out(X, [], [])
U4(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U5(X, Y, YS, ZS, rev_in(US, VS))
rev_in([], []) → rev_out([], [])
U5(X, Y, YS, ZS, rev_out(US, VS)) → U6(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U6(X, Y, YS, ZS, rev_out(.(X, VS), ZS)) → rev2_out(X, .(Y, YS), ZS)
U2(X, XS, Y, YS, rev2_out(X, XS, YS)) → rev_out(.(X, XS), .(Y, YS))

The argument filtering Pi contains the following mapping:
rev_in(x1, x2)  =  rev_in(x1)
.(x1, x2)  =  .(x1, x2)
U1(x1, x2, x3, x4, x5)  =  U1(x1, x2, x5)
rev1_in(x1, x2, x3)  =  rev1_in(x1, x2)
U3(x1, x2, x3, x4, x5)  =  U3(x5)
[]  =  []
rev1_out(x1, x2, x3)  =  rev1_out(x3)
U2(x1, x2, x3, x4, x5)  =  U2(x3, x5)
rev2_in(x1, x2, x3)  =  rev2_in(x1, x2)
U4(x1, x2, x3, x4, x5)  =  U4(x1, x5)
rev2_out(x1, x2, x3)  =  rev2_out(x3)
U5(x1, x2, x3, x4, x5)  =  U5(x1, x5)
rev_out(x1, x2)  =  rev_out(x2)
U6(x1, x2, x3, x4, x5)  =  U6(x5)


Using Dependency Pairs [1,30] we result in the following initial DP problem:
Pi DP problem:
The TRS P consists of the following rules:

REV_IN(.(X, XS), .(Y, YS)) → U11(X, XS, Y, YS, rev1_in(X, XS, Y))
REV_IN(.(X, XS), .(Y, YS)) → REV1_IN(X, XS, Y)
REV1_IN(X, .(Y, YS), Z) → U31(X, Y, YS, Z, rev1_in(Y, YS, Z))
REV1_IN(X, .(Y, YS), Z) → REV1_IN(Y, YS, Z)
U11(X, XS, Y, YS, rev1_out(X, XS, Y)) → U21(X, XS, Y, YS, rev2_in(X, XS, YS))
U11(X, XS, Y, YS, rev1_out(X, XS, Y)) → REV2_IN(X, XS, YS)
REV2_IN(X, .(Y, YS), ZS) → U41(X, Y, YS, ZS, rev2_in(Y, YS, US))
REV2_IN(X, .(Y, YS), ZS) → REV2_IN(Y, YS, US)
U41(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U51(X, Y, YS, ZS, rev_in(US, VS))
U41(X, Y, YS, ZS, rev2_out(Y, YS, US)) → REV_IN(US, VS)
U51(X, Y, YS, ZS, rev_out(US, VS)) → U61(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U51(X, Y, YS, ZS, rev_out(US, VS)) → REV_IN(.(X, VS), ZS)

The TRS R consists of the following rules:

rev_in(.(X, XS), .(Y, YS)) → U1(X, XS, Y, YS, rev1_in(X, XS, Y))
rev1_in(X, .(Y, YS), Z) → U3(X, Y, YS, Z, rev1_in(Y, YS, Z))
rev1_in(X, [], X) → rev1_out(X, [], X)
U3(X, Y, YS, Z, rev1_out(Y, YS, Z)) → rev1_out(X, .(Y, YS), Z)
U1(X, XS, Y, YS, rev1_out(X, XS, Y)) → U2(X, XS, Y, YS, rev2_in(X, XS, YS))
rev2_in(X, .(Y, YS), ZS) → U4(X, Y, YS, ZS, rev2_in(Y, YS, US))
rev2_in(X, [], []) → rev2_out(X, [], [])
U4(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U5(X, Y, YS, ZS, rev_in(US, VS))
rev_in([], []) → rev_out([], [])
U5(X, Y, YS, ZS, rev_out(US, VS)) → U6(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U6(X, Y, YS, ZS, rev_out(.(X, VS), ZS)) → rev2_out(X, .(Y, YS), ZS)
U2(X, XS, Y, YS, rev2_out(X, XS, YS)) → rev_out(.(X, XS), .(Y, YS))

The argument filtering Pi contains the following mapping:
rev_in(x1, x2)  =  rev_in(x1)
.(x1, x2)  =  .(x1, x2)
U1(x1, x2, x3, x4, x5)  =  U1(x1, x2, x5)
rev1_in(x1, x2, x3)  =  rev1_in(x1, x2)
U3(x1, x2, x3, x4, x5)  =  U3(x5)
[]  =  []
rev1_out(x1, x2, x3)  =  rev1_out(x3)
U2(x1, x2, x3, x4, x5)  =  U2(x3, x5)
rev2_in(x1, x2, x3)  =  rev2_in(x1, x2)
U4(x1, x2, x3, x4, x5)  =  U4(x1, x5)
rev2_out(x1, x2, x3)  =  rev2_out(x3)
U5(x1, x2, x3, x4, x5)  =  U5(x1, x5)
rev_out(x1, x2)  =  rev_out(x2)
U6(x1, x2, x3, x4, x5)  =  U6(x5)
REV_IN(x1, x2)  =  REV_IN(x1)
U51(x1, x2, x3, x4, x5)  =  U51(x1, x5)
REV2_IN(x1, x2, x3)  =  REV2_IN(x1, x2)
REV1_IN(x1, x2, x3)  =  REV1_IN(x1, x2)
U41(x1, x2, x3, x4, x5)  =  U41(x1, x5)
U31(x1, x2, x3, x4, x5)  =  U31(x5)
U21(x1, x2, x3, x4, x5)  =  U21(x3, x5)
U61(x1, x2, x3, x4, x5)  =  U61(x5)
U11(x1, x2, x3, x4, x5)  =  U11(x1, x2, x5)

We have to consider all (P,R,Pi)-chains

↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
PiDP
          ↳ DependencyGraphProof

Pi DP problem:
The TRS P consists of the following rules:

REV_IN(.(X, XS), .(Y, YS)) → U11(X, XS, Y, YS, rev1_in(X, XS, Y))
REV_IN(.(X, XS), .(Y, YS)) → REV1_IN(X, XS, Y)
REV1_IN(X, .(Y, YS), Z) → U31(X, Y, YS, Z, rev1_in(Y, YS, Z))
REV1_IN(X, .(Y, YS), Z) → REV1_IN(Y, YS, Z)
U11(X, XS, Y, YS, rev1_out(X, XS, Y)) → U21(X, XS, Y, YS, rev2_in(X, XS, YS))
U11(X, XS, Y, YS, rev1_out(X, XS, Y)) → REV2_IN(X, XS, YS)
REV2_IN(X, .(Y, YS), ZS) → U41(X, Y, YS, ZS, rev2_in(Y, YS, US))
REV2_IN(X, .(Y, YS), ZS) → REV2_IN(Y, YS, US)
U41(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U51(X, Y, YS, ZS, rev_in(US, VS))
U41(X, Y, YS, ZS, rev2_out(Y, YS, US)) → REV_IN(US, VS)
U51(X, Y, YS, ZS, rev_out(US, VS)) → U61(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U51(X, Y, YS, ZS, rev_out(US, VS)) → REV_IN(.(X, VS), ZS)

The TRS R consists of the following rules:

rev_in(.(X, XS), .(Y, YS)) → U1(X, XS, Y, YS, rev1_in(X, XS, Y))
rev1_in(X, .(Y, YS), Z) → U3(X, Y, YS, Z, rev1_in(Y, YS, Z))
rev1_in(X, [], X) → rev1_out(X, [], X)
U3(X, Y, YS, Z, rev1_out(Y, YS, Z)) → rev1_out(X, .(Y, YS), Z)
U1(X, XS, Y, YS, rev1_out(X, XS, Y)) → U2(X, XS, Y, YS, rev2_in(X, XS, YS))
rev2_in(X, .(Y, YS), ZS) → U4(X, Y, YS, ZS, rev2_in(Y, YS, US))
rev2_in(X, [], []) → rev2_out(X, [], [])
U4(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U5(X, Y, YS, ZS, rev_in(US, VS))
rev_in([], []) → rev_out([], [])
U5(X, Y, YS, ZS, rev_out(US, VS)) → U6(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U6(X, Y, YS, ZS, rev_out(.(X, VS), ZS)) → rev2_out(X, .(Y, YS), ZS)
U2(X, XS, Y, YS, rev2_out(X, XS, YS)) → rev_out(.(X, XS), .(Y, YS))

The argument filtering Pi contains the following mapping:
rev_in(x1, x2)  =  rev_in(x1)
.(x1, x2)  =  .(x1, x2)
U1(x1, x2, x3, x4, x5)  =  U1(x1, x2, x5)
rev1_in(x1, x2, x3)  =  rev1_in(x1, x2)
U3(x1, x2, x3, x4, x5)  =  U3(x5)
[]  =  []
rev1_out(x1, x2, x3)  =  rev1_out(x3)
U2(x1, x2, x3, x4, x5)  =  U2(x3, x5)
rev2_in(x1, x2, x3)  =  rev2_in(x1, x2)
U4(x1, x2, x3, x4, x5)  =  U4(x1, x5)
rev2_out(x1, x2, x3)  =  rev2_out(x3)
U5(x1, x2, x3, x4, x5)  =  U5(x1, x5)
rev_out(x1, x2)  =  rev_out(x2)
U6(x1, x2, x3, x4, x5)  =  U6(x5)
REV_IN(x1, x2)  =  REV_IN(x1)
U51(x1, x2, x3, x4, x5)  =  U51(x1, x5)
REV2_IN(x1, x2, x3)  =  REV2_IN(x1, x2)
REV1_IN(x1, x2, x3)  =  REV1_IN(x1, x2)
U41(x1, x2, x3, x4, x5)  =  U41(x1, x5)
U31(x1, x2, x3, x4, x5)  =  U31(x5)
U21(x1, x2, x3, x4, x5)  =  U21(x3, x5)
U61(x1, x2, x3, x4, x5)  =  U61(x5)
U11(x1, x2, x3, x4, x5)  =  U11(x1, x2, x5)

We have to consider all (P,R,Pi)-chains
The approximation of the Dependency Graph [30] contains 2 SCCs with 4 less nodes.

↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
        ↳ PiDP
          ↳ DependencyGraphProof
            ↳ AND
PiDP
                ↳ UsableRulesProof
              ↳ PiDP

Pi DP problem:
The TRS P consists of the following rules:

REV1_IN(X, .(Y, YS), Z) → REV1_IN(Y, YS, Z)

The TRS R consists of the following rules:

rev_in(.(X, XS), .(Y, YS)) → U1(X, XS, Y, YS, rev1_in(X, XS, Y))
rev1_in(X, .(Y, YS), Z) → U3(X, Y, YS, Z, rev1_in(Y, YS, Z))
rev1_in(X, [], X) → rev1_out(X, [], X)
U3(X, Y, YS, Z, rev1_out(Y, YS, Z)) → rev1_out(X, .(Y, YS), Z)
U1(X, XS, Y, YS, rev1_out(X, XS, Y)) → U2(X, XS, Y, YS, rev2_in(X, XS, YS))
rev2_in(X, .(Y, YS), ZS) → U4(X, Y, YS, ZS, rev2_in(Y, YS, US))
rev2_in(X, [], []) → rev2_out(X, [], [])
U4(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U5(X, Y, YS, ZS, rev_in(US, VS))
rev_in([], []) → rev_out([], [])
U5(X, Y, YS, ZS, rev_out(US, VS)) → U6(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U6(X, Y, YS, ZS, rev_out(.(X, VS), ZS)) → rev2_out(X, .(Y, YS), ZS)
U2(X, XS, Y, YS, rev2_out(X, XS, YS)) → rev_out(.(X, XS), .(Y, YS))

The argument filtering Pi contains the following mapping:
rev_in(x1, x2)  =  rev_in(x1)
.(x1, x2)  =  .(x1, x2)
U1(x1, x2, x3, x4, x5)  =  U1(x1, x2, x5)
rev1_in(x1, x2, x3)  =  rev1_in(x1, x2)
U3(x1, x2, x3, x4, x5)  =  U3(x5)
[]  =  []
rev1_out(x1, x2, x3)  =  rev1_out(x3)
U2(x1, x2, x3, x4, x5)  =  U2(x3, x5)
rev2_in(x1, x2, x3)  =  rev2_in(x1, x2)
U4(x1, x2, x3, x4, x5)  =  U4(x1, x5)
rev2_out(x1, x2, x3)  =  rev2_out(x3)
U5(x1, x2, x3, x4, x5)  =  U5(x1, x5)
rev_out(x1, x2)  =  rev_out(x2)
U6(x1, x2, x3, x4, x5)  =  U6(x5)
REV1_IN(x1, x2, x3)  =  REV1_IN(x1, x2)

We have to consider all (P,R,Pi)-chains
For (infinitary) constructor rewriting [30] we can delete all non-usable rules from R.

↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
        ↳ PiDP
          ↳ DependencyGraphProof
            ↳ AND
              ↳ PiDP
                ↳ UsableRulesProof
PiDP
                    ↳ PiDPToQDPProof
              ↳ PiDP

Pi DP problem:
The TRS P consists of the following rules:

REV1_IN(X, .(Y, YS), Z) → REV1_IN(Y, YS, Z)

R is empty.
The argument filtering Pi contains the following mapping:
.(x1, x2)  =  .(x1, x2)
REV1_IN(x1, x2, x3)  =  REV1_IN(x1, x2)

We have to consider all (P,R,Pi)-chains
Transforming (infinitary) constructor rewriting Pi-DP problem [30] into ordinary QDP problem [15] by application of Pi.

↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
        ↳ PiDP
          ↳ DependencyGraphProof
            ↳ AND
              ↳ PiDP
                ↳ UsableRulesProof
                  ↳ PiDP
                    ↳ PiDPToQDPProof
QDP
                        ↳ QDPSizeChangeProof
              ↳ PiDP

Q DP problem:
The TRS P consists of the following rules:

REV1_IN(X, .(Y, YS)) → REV1_IN(Y, YS)

R is empty.
Q is empty.
We have to consider all (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:



↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
        ↳ PiDP
          ↳ DependencyGraphProof
            ↳ AND
              ↳ PiDP
PiDP
                ↳ PiDPToQDPProof

Pi DP problem:
The TRS P consists of the following rules:

U41(X, Y, YS, ZS, rev2_out(Y, YS, US)) → REV_IN(US, VS)
U41(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U51(X, Y, YS, ZS, rev_in(US, VS))
REV2_IN(X, .(Y, YS), ZS) → U41(X, Y, YS, ZS, rev2_in(Y, YS, US))
REV2_IN(X, .(Y, YS), ZS) → REV2_IN(Y, YS, US)
REV_IN(.(X, XS), .(Y, YS)) → U11(X, XS, Y, YS, rev1_in(X, XS, Y))
U51(X, Y, YS, ZS, rev_out(US, VS)) → REV_IN(.(X, VS), ZS)
U11(X, XS, Y, YS, rev1_out(X, XS, Y)) → REV2_IN(X, XS, YS)

The TRS R consists of the following rules:

rev_in(.(X, XS), .(Y, YS)) → U1(X, XS, Y, YS, rev1_in(X, XS, Y))
rev1_in(X, .(Y, YS), Z) → U3(X, Y, YS, Z, rev1_in(Y, YS, Z))
rev1_in(X, [], X) → rev1_out(X, [], X)
U3(X, Y, YS, Z, rev1_out(Y, YS, Z)) → rev1_out(X, .(Y, YS), Z)
U1(X, XS, Y, YS, rev1_out(X, XS, Y)) → U2(X, XS, Y, YS, rev2_in(X, XS, YS))
rev2_in(X, .(Y, YS), ZS) → U4(X, Y, YS, ZS, rev2_in(Y, YS, US))
rev2_in(X, [], []) → rev2_out(X, [], [])
U4(X, Y, YS, ZS, rev2_out(Y, YS, US)) → U5(X, Y, YS, ZS, rev_in(US, VS))
rev_in([], []) → rev_out([], [])
U5(X, Y, YS, ZS, rev_out(US, VS)) → U6(X, Y, YS, ZS, rev_in(.(X, VS), ZS))
U6(X, Y, YS, ZS, rev_out(.(X, VS), ZS)) → rev2_out(X, .(Y, YS), ZS)
U2(X, XS, Y, YS, rev2_out(X, XS, YS)) → rev_out(.(X, XS), .(Y, YS))

The argument filtering Pi contains the following mapping:
rev_in(x1, x2)  =  rev_in(x1)
.(x1, x2)  =  .(x1, x2)
U1(x1, x2, x3, x4, x5)  =  U1(x1, x2, x5)
rev1_in(x1, x2, x3)  =  rev1_in(x1, x2)
U3(x1, x2, x3, x4, x5)  =  U3(x5)
[]  =  []
rev1_out(x1, x2, x3)  =  rev1_out(x3)
U2(x1, x2, x3, x4, x5)  =  U2(x3, x5)
rev2_in(x1, x2, x3)  =  rev2_in(x1, x2)
U4(x1, x2, x3, x4, x5)  =  U4(x1, x5)
rev2_out(x1, x2, x3)  =  rev2_out(x3)
U5(x1, x2, x3, x4, x5)  =  U5(x1, x5)
rev_out(x1, x2)  =  rev_out(x2)
U6(x1, x2, x3, x4, x5)  =  U6(x5)
REV_IN(x1, x2)  =  REV_IN(x1)
U51(x1, x2, x3, x4, x5)  =  U51(x1, x5)
REV2_IN(x1, x2, x3)  =  REV2_IN(x1, x2)
U41(x1, x2, x3, x4, x5)  =  U41(x1, x5)
U11(x1, x2, x3, x4, x5)  =  U11(x1, x2, x5)

We have to consider all (P,R,Pi)-chains
Transforming (infinitary) constructor rewriting Pi-DP problem [30] into ordinary QDP problem [15] by application of Pi.

↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
        ↳ PiDP
          ↳ DependencyGraphProof
            ↳ AND
              ↳ PiDP
              ↳ PiDP
                ↳ PiDPToQDPProof
QDP
                    ↳ QDPOrderProof

Q DP problem:
The TRS P consists of the following rules:

U41(X, rev2_out(US)) → U51(X, rev_in(US))
U11(X, XS, rev1_out(Y)) → REV2_IN(X, XS)
U51(X, rev_out(VS)) → REV_IN(.(X, VS))
U41(X, rev2_out(US)) → REV_IN(US)
REV2_IN(X, .(Y, YS)) → REV2_IN(Y, YS)
REV2_IN(X, .(Y, YS)) → U41(X, rev2_in(Y, YS))
REV_IN(.(X, XS)) → U11(X, XS, rev1_in(X, XS))

The TRS R consists of the following rules:

rev_in(.(X, XS)) → U1(X, XS, rev1_in(X, XS))
rev1_in(X, .(Y, YS)) → U3(rev1_in(Y, YS))
rev1_in(X, []) → rev1_out(X)
U3(rev1_out(Z)) → rev1_out(Z)
U1(X, XS, rev1_out(Y)) → U2(Y, rev2_in(X, XS))
rev2_in(X, .(Y, YS)) → U4(X, rev2_in(Y, YS))
rev2_in(X, []) → rev2_out([])
U4(X, rev2_out(US)) → U5(X, rev_in(US))
rev_in([]) → rev_out([])
U5(X, rev_out(VS)) → U6(rev_in(.(X, VS)))
U6(rev_out(ZS)) → rev2_out(ZS)
U2(Y, rev2_out(YS)) → rev_out(.(Y, YS))

The set Q consists of the following terms:

rev_in(x0)
rev1_in(x0, x1)
U3(x0)
U1(x0, x1, x2)
rev2_in(x0, x1)
U4(x0, x1)
U5(x0, x1)
U6(x0)
U2(x0, x1)

We have to consider all (P,Q,R)-chains.
We use the reduction pair processor [15].


The following pairs can be oriented strictly and are deleted.


U41(X, rev2_out(US)) → REV_IN(US)
REV2_IN(X, .(Y, YS)) → REV2_IN(Y, YS)
REV_IN(.(X, XS)) → U11(X, XS, rev1_in(X, XS))
The remaining pairs can at least be oriented weakly.

U41(X, rev2_out(US)) → U51(X, rev_in(US))
U11(X, XS, rev1_out(Y)) → REV2_IN(X, XS)
U51(X, rev_out(VS)) → REV_IN(.(X, VS))
REV2_IN(X, .(Y, YS)) → U41(X, rev2_in(Y, YS))
Used ordering: Polynomial interpretation [25]:

POL(.(x1, x2)) = 1 + x2   
POL(REV2_IN(x1, x2)) = x2   
POL(REV_IN(x1)) = x1   
POL(U1(x1, x2, x3)) = x2 + x3   
POL(U11(x1, x2, x3)) = x2   
POL(U2(x1, x2)) = 1 + x2   
POL(U3(x1)) = x1   
POL(U4(x1, x2)) = 1 + x2   
POL(U41(x1, x2)) = 1 + x2   
POL(U5(x1, x2)) = 1 + x2   
POL(U51(x1, x2)) = 1 + x2   
POL(U6(x1)) = x1   
POL([]) = 0   
POL(rev1_in(x1, x2)) = 1   
POL(rev1_out(x1)) = 1   
POL(rev2_in(x1, x2)) = x2   
POL(rev2_out(x1)) = x1   
POL(rev_in(x1)) = x1   
POL(rev_out(x1)) = x1   

The following usable rules [17] were oriented:

U1(X, XS, rev1_out(Y)) → U2(Y, rev2_in(X, XS))
U2(Y, rev2_out(YS)) → rev_out(.(Y, YS))
U4(X, rev2_out(US)) → U5(X, rev_in(US))
U3(rev1_out(Z)) → rev1_out(Z)
rev_in([]) → rev_out([])
rev1_in(X, []) → rev1_out(X)
rev1_in(X, .(Y, YS)) → U3(rev1_in(Y, YS))
U5(X, rev_out(VS)) → U6(rev_in(.(X, VS)))
rev_in(.(X, XS)) → U1(X, XS, rev1_in(X, XS))
rev2_in(X, .(Y, YS)) → U4(X, rev2_in(Y, YS))
U6(rev_out(ZS)) → rev2_out(ZS)
rev2_in(X, []) → rev2_out([])



↳ Prolog
  ↳ PrologToPiTRSProof
    ↳ PiTRS
      ↳ DependencyPairsProof
        ↳ PiDP
          ↳ DependencyGraphProof
            ↳ AND
              ↳ PiDP
              ↳ PiDP
                ↳ PiDPToQDPProof
                  ↳ QDP
                    ↳ QDPOrderProof
QDP
                        ↳ DependencyGraphProof

Q DP problem:
The TRS P consists of the following rules:

U41(X, rev2_out(US)) → U51(X, rev_in(US))
U11(X, XS, rev1_out(Y)) → REV2_IN(X, XS)
U51(X, rev_out(VS)) → REV_IN(.(X, VS))
REV2_IN(X, .(Y, YS)) → U41(X, rev2_in(Y, YS))

The TRS R consists of the following rules:

rev_in(.(X, XS)) → U1(X, XS, rev1_in(X, XS))
rev1_in(X, .(Y, YS)) → U3(rev1_in(Y, YS))
rev1_in(X, []) → rev1_out(X)
U3(rev1_out(Z)) → rev1_out(Z)
U1(X, XS, rev1_out(Y)) → U2(Y, rev2_in(X, XS))
rev2_in(X, .(Y, YS)) → U4(X, rev2_in(Y, YS))
rev2_in(X, []) → rev2_out([])
U4(X, rev2_out(US)) → U5(X, rev_in(US))
rev_in([]) → rev_out([])
U5(X, rev_out(VS)) → U6(rev_in(.(X, VS)))
U6(rev_out(ZS)) → rev2_out(ZS)
U2(Y, rev2_out(YS)) → rev_out(.(Y, YS))

The set Q consists of the following terms:

rev_in(x0)
rev1_in(x0, x1)
U3(x0)
U1(x0, x1, x2)
rev2_in(x0, x1)
U4(x0, x1)
U5(x0, x1)
U6(x0)
U2(x0, x1)

We have to consider all (P,Q,R)-chains.
The approximation of the Dependency Graph [15,17,22] contains 0 SCCs with 4 less nodes.